home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / source / snip9503 / portable.h < prev    next >
C/C++ Source or Header  |  1995-03-14  |  6KB  |  173 lines

  1. /*============================================================================
  2.  
  3.     portable.h   v1.00      Written by Scott Robert Ladd.
  4.  
  5.     _MSC_VER        Microsoft C 6.0 and later
  6.     _QC             Microsoft Quick C 2.51 and later
  7.     __TURBOC__      Borland Turbo C, Turbo C++, and Borland C++
  8.     __BORLANDC__    Borland C++
  9.     __ZTC__         Zortech C++ and Symantec C++
  10.     __SC__          Symantec C++
  11.     __WATCOMC__     WATCOM C
  12.     __POWERC        Mix Power C
  13.  
  14.     Revised:
  15.     09/14/93  Fred Cole  Moved MK_FP() macro to end of file to avoid
  16.                          redefinition error when dos.h gets included
  17.                          at the in/outport definitions for __TURBOC__
  18.     09/15/93  Thad Smith Add conditional code for TC 2.01
  19.                          Fix findfirst/findnext support for ZTC 3.0
  20.     10/15/93  Bob Stout  Revise find first/next support
  21.     04/03/94  Bob Stout  Add Power C support, FAR
  22. ============================================================================*/
  23.  
  24.  
  25. /* prevent multiple inclusions of this header file */
  26.  
  27. #if !defined(PORTABLE_H)
  28. #define PORTABLE_H
  29.  
  30. /*
  31. **  Correct far pointer syntax
  32. */
  33.  
  34. #if defined(__POWERC) || (defined(__TURBOC__) && !defined(__BORLANDC__))
  35.  #define FAR far
  36. #else
  37.  #define FAR _far
  38. #endif
  39.  
  40. /*----------------------------------------------------------------------------
  41.     Directory search macros and data structures
  42.  
  43.     DOSFileData         MS-DOS file data structure
  44.     FIND_FIRST          MS-DOS function 0x4E -- find first file matchine spec
  45.     FIND_NEXT           MS-DOS function 0x4F -- find subsequent files
  46. ----------------------------------------------------------------------------*/
  47.  
  48. /* make sure the structure is packed on byte boundary */
  49.  
  50. #if defined(_MSC_VER) || defined(_QC) || defined(__WATCOMC__)
  51.  
  52.   /*
  53.   **  The following line generates a benign warning under MSC 7+
  54.   **  when compiled without /Zp1.
  55.   */
  56.  
  57.     #pragma pack(1)
  58. #elif defined(__ZTC__) || defined (__SC__)
  59.     #pragma ZTC align 1
  60. #elif defined(__BORLANDC__) || defined(__TURBOC__) && (__TURBOC__ > 0x202)
  61.     #pragma option -a-
  62. #endif
  63.  
  64. /* use this structure in place of compiler-defined file structure */
  65.  
  66. typedef struct {
  67.       char        reserved[21];
  68.       char        attrib;
  69.       unsigned    time;
  70.       unsigned    date;
  71.       long        size;
  72.       char        name[13];
  73.       } DOSFileData;
  74.  
  75. /* set structure alignment to default */
  76.  
  77. #if defined (_MSC_VER) || defined(_QC) || defined(__WATCOMC__)
  78.  #pragma pack()
  79. #elif defined (__ZTC__)
  80.  #pragma ZTC align
  81. #elif defined(__TURBOC__) && (__TURBOC__ > 0x202)
  82.  #pragma option -a.
  83. #endif
  84.  
  85. /* include proper header files and create macros */
  86.  
  87. #if defined (_MSC_VER) || defined(_QC) || defined(__WATCOMC__)
  88.  #include "direct.h"
  89.  #define FIND_FIRST(spec,attr,buf) _dos_findfirst(spec,attr,\
  90.        (struct find_t *)buf)
  91.  #define FIND_NEXT(buf) _dos_findnext((struct find_t *)buf)
  92. #elif defined (__TURBOC__)
  93.  #include "dir.h"
  94.  #define FIND_FIRST(spec,attr,buf) findfirst(spec,(struct ffblk *)buf,attr)
  95.  #define FIND_NEXT(buf) findnext((struct ffblk *)buf)
  96. #elif defined (__ZTC__)
  97.  #include "dos.h"
  98.  #define FIND_FIRST(spec,attr,buf) _dos_findfirst(spec,attr,\
  99.        (struct find_t *)buf)
  100.  #define FIND_NEXT(buf) _dos_findnext((struct find_t *)buf)
  101. #endif
  102.  
  103. /*----------------------------------------------------------------------------
  104.     I/O Port Macros
  105.  
  106.     IN_PORT     read byte from I/O port
  107.     IN_PORTW    read word from I/O port
  108.     OUT_PORT    write byte to I/O port
  109.     OUT_PORTW   write word to I/O port
  110. ----------------------------------------------------------------------------*/
  111.  
  112. #if defined(__TURBOC__)
  113.  #include "dos.h"
  114.  #define IN_PORT(port)           inportb(port)
  115.  #define IN_PORTW(port)          inport(port)
  116.  #define OUT_PORT(port, val)     outportb(port, val)
  117.  #define OUT_PORTW(port, val)    outport(port, val)
  118. #else
  119.  #include "conio.h"
  120.  
  121.  #define IN_PORT(port)           inp(port)
  122.  #define IN_PORTW(port)          inpw(port)
  123.  #define OUT_PORT(port, val)     outp(port, val)
  124.  #define OUT_PORTW(port, val)    outpw(port, val)
  125.  
  126. /*----------------------------------------------------------------------------
  127.     Borland pseudo register macros
  128.  
  129.     These macros replace references to Borland's pseudo register
  130.     variables and geninterrup() funciton with traditional struct
  131.     REGS/int86 references.
  132. ----------------------------------------------------------------------------*/
  133.  
  134. #if !defined(__TURBOC__)
  135.  #include "dos.h"
  136.  
  137.  extern union REGS CPURegs;
  138.  
  139.  #define _AX CPURegs.x.ax
  140.  #define _BX CPURegs.x.bx
  141.  #define _CX CPURegs.x.cx
  142.  #define _DX CPURegs.x.dx
  143.  
  144.  #define _AH CPURegs.h.ah
  145.  #define _AL CPURegs.h.al
  146.  #define _BH CPURegs.h.bh
  147.  #define _BL CPURegs.h.bl
  148.  #define _CH CPURegs.h.ch
  149.  #define _CL CPURegs.h.cl
  150.  #define _DH CPURegs.h.dh
  151.  #define _DL CPURegs.h.dl
  152.  
  153.  #define geninterrupt(n) int86(n,&CPURegs,&CPURegs);
  154.  #define O_DENYALL   0x10
  155.  #define O_DENYWRITE 0x20
  156.  #define O_DENYREAD  0x30
  157.  #define O_DENYNONE  0x40
  158. #endif
  159.  
  160. #endif
  161.  
  162. /*----------------------------------------------------------------------------
  163.     Pointer-related macros
  164.  
  165.     MK_FP   creates a far pointer from segment and offset values
  166. ----------------------------------------------------------------------------*/
  167.  
  168. #if !defined(MK_FP)
  169.     #define MK_FP(seg,off) ((void FAR *)(((long)(seg) << 16)|(unsigned)(off)))
  170. #endif
  171.  
  172. #endif
  173.